/**
 * src/config/pointsConfig.ts
 * ------------------------------------
 * 积分系统配置文件
 * 1. 积分兑换比例：定义积分与金额的转换关系
 * 2. 积分使用限制：设置积分使用的各种限制条件
 * 3. 积分奖励规则：定义各种场景下的积分奖励
 * 4. 会员等级配置：定义不同等级的会员权益
 * 5. 积分过期配置：设置积分有效期和过期规则
 * 该配置文件集中管理所有积分相关的参数，便于统一调整
 * 创建日期：2025-08-06
 */

/**
 * 积分兑换比例配置
 * 定义积分与人民币之间的转换关系
 */
export const POINTS_EXCHANGE_RATE = {
  // 消费金额到积分的兑换比例 (1元 = 1积分)
  MONEY_TO_POINTS: 1,
  
  // 积分到金额的兑换比例 (10积分 = 1元)
  POINTS_TO_MONEY: 0.1,
}

/**
 * 积分使用限制配置
 * 设置积分使用时的各种限制条件，确保合理使用
 */
export const POINTS_USAGE_LIMITS = {
  // 订单最大抵扣比例 (最多抵扣订单金额的50%)
  MAX_DISCOUNT_PERCENTAGE: 0.5,
  
  // 最低可使用积分
  MIN_POINTS_TO_USE: 10,
  
  // 积分使用倍数限制 (必须是10的倍数)
  POINTS_USE_MULTIPLE: 10,
}

/**
 * 积分奖励规则配置
 * 定义各种用户行为对应的积分奖励
 */
export const POINTS_REWARDS = {
  // 注册奖励积分
  REGISTRATION: 100,
  
  // 首单奖励积分
  FIRST_ORDER: 50,
  
  // 评价奖励积分
  RATING: 10,
  
  // 分享奖励积分
  SHARING: 5,
  
  // 连续下单奖励 (每天)
  CONSECUTIVE_ORDER: 15,
}

/**
 * 会员等级配置
 * 定义不同等级的会员权益和升级条件
 * 每个等级包含：等级、名称、最低积分、积分倍率、权益列表
 */
export const MEMBER_LEVELS = [
  {
    level: 1,
    name: '普通会员',
    minPoints: 0,
    pointsMultiplier: 1.0, // 积分倍率
    benefits: ['基础积分累计']
  },
  {
    level: 2,
    name: '银牌会员',
    minPoints: 1000,
    pointsMultiplier: 1.2,
    benefits: ['积分1.2倍', '生日特权']
  },
  {
    level: 3,
    name: '金牌会员',
    minPoints: 5000,
    pointsMultiplier: 1.5,
    benefits: ['积分1.5倍', '生日特权', '专属优惠']
  },
  {
    level: 4,
    name: '钻石会员',
    minPoints: 20000,
    pointsMultiplier: 2.0,
    benefits: ['积分2倍', '生日特权', '专属优惠', '优先服务']
  },
]

/**
 * 积分过期配置
 * 设置积分有效期和不同会员等级的过期规则
 */
export const POINTS_EXPIRATION = {
  // 是否启用积分过期
  ENABLED: true,
  
  // 积分有效期(天)
  VALIDITY_DAYS: 365,
  
  // 最低等级的会员积分过期时间(天)，对应MEMBER_LEVELS中的level
  LEVEL_EXPIRATION: {
    1: 365,  // 普通会员积分1年过期
    2: 548,  // 银牌会员积分1.5年过期
    3: 730,  // 金牌会员积分2年过期
    4: -1,   // 钻石会员积分永不过期(-1表示永不过期)
  }
}

/**
 * 积分历史记录保留时间(天)
 * 超过此时间的积分交易记录将被清理
 */
export const POINTS_HISTORY_RETENTION_DAYS = 730; // 2年

/**
 * 导出默认配置
 * 将所有配置项整合为一个对象，便于统一导入
 */
export default {
  POINTS_EXCHANGE_RATE,
  POINTS_USAGE_LIMITS,
  POINTS_REWARDS,
  MEMBER_LEVELS,
  POINTS_EXPIRATION,
  POINTS_HISTORY_RETENTION_DAYS
}; 